package Biblioteca;

import java.io.File;
import org.jaudiotagger.audio.AudioFile;
import org.jaudiotagger.audio.AudioFileIO;
import org.jaudiotagger.audio.AudioHeader;
import org.jaudiotagger.tag.FieldKey;
import org.jaudiotagger.tag.Tag;

/**
 *  Clase que proporciona los métodos para construír canciones desde archivos de audio
 * leyendo su meta-información de las etiquetas en el archivo.
 * 
 */
public class LectorTags {

    /**
     * Método principal. Construye una canción desde un archivo.
     * @param ruta Ruta del archivo de audio
     * @return Cancion con su meta-información cargada.
     */
    //Haremos otra clase parecida u otro método de esta para leer de xml en futuras implementaciones.
    public Cancion cargarDeArchivo(String ruta) {
        Cancion cancion = new Cancion(ruta);
        try {
            /* Lee el archivo desde la ruta,
             * lee la cabecera y el tag del archivo
             * carga los tags en la clase cancion
             */
            File archivo = new File(ruta);
            AudioFile f = AudioFileIO.read(archivo);
            Tag tag = f.getTag();
            AudioHeader header = f.getAudioHeader();
            cancion.setTitulo(tag.getFirst(FieldKey.TITLE));
//TODO: implementar lectura de tags de artista album y genero
            //cancion.setArtista(tag.getFirst(FieldKey.ARTIST));
            //cancion.setTag("Album", tag.getFirst(FieldKey.ALBUM));
            //cancion.setTag("Genero", tag.getFirst(FieldKey.GENRE));

            cancion.setTag("duracion", Double.toString(header.getTrackLength()));
            cancion.setTag("biltrate", header.getBitRate());
            cancion.setTag("codec", header.getFormat());
            cancion.setTag("canales", header.getChannels());
            cancion.setTag("año", tag.getFirst(FieldKey.YEAR));
            cancion.setTag("pista", tag.getFirst(FieldKey.TRACK));

        } catch (Exception e) {
            // Imprime error ocurrido
            //TODO: tratar la excepción para archivos corruptos, de manera que permita continuar la ejecución.
            System.out.println(e.getMessage());
        }


        return cancion;
    }
}
